﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Baza;

namespace wsnForms
{
    public partial class Potwierdzenie : Form
    {
        private List<Sprzet> ListaSprzetow = new List<Sprzet>();
        private List<BazaDanych.czas> ListaCzasow = new List<BazaDanych.czas>();

        //Edytowałem konstruktor, żeby przekazywać do obiektu okienka potwierdzenia dane zamówienia
        public Potwierdzenie(List<Sprzet> ListaSprzetow, List<BazaDanych.czas> ListaCzasow)
        {
            InitializeComponent();

            this.ListaSprzetow = ListaSprzetow;
            this.ListaCzasow = ListaCzasow;

            sprawdzanieLoginu(WSN.lpowitalny);
        }

        #region SprawdzanieLoginu

        //sprawdza czy zalogowany jest użytkownik, pracownik czy nikt
        public void sprawdzanieLoginu(WSN.LabelPowitalnyPlusOsoba labelP)
        {
            //jeżeli jest zalogowany użytkownik
            if ((labelP.uzytkownik != null) && (labelP.pracownik == null))
            {
                llogin.Enabled = false;
                lpassword.Enabled = false;
                tblogin.Enabled = false;
                tbpassword.Enabled = false;
                bzaloguj.Enabled = false;
                noweKonto.Enabled = false;
                listaKlientow.Enabled = false;
                lNazwiskoSearch.Enabled = false;
                tbNazwiskoSearch.Enabled = false;

                llogin.Visible = false;
                lpassword.Visible = false;
                tblogin.Visible = false;
                tbpassword.Visible = false;
                bzaloguj.Visible = false;
                noweKonto.Visible = false;
                listaKlientow.Visible = false;
                lNazwiskoSearch.Visible = false;
                tbNazwiskoSearch.Visible = false;

                tbLog.Text = labelP.uzytkownik.UzLogin;
                tbImie.Text = labelP.uzytkownik.UzImie;
                tbNazwisko.Text = labelP.uzytkownik.UzNazwisko;
                tbPesel.Text = labelP.uzytkownik.UzPesel;
                tbAdres.Text = labelP.uzytkownik.UzAdres;
                tbTel.Text = labelP.uzytkownik.UzTel;
                tbMail.Text = labelP.uzytkownik.UzMail;
                lStan.Text = labelP.uzytkownik.UzNazwisko + ". Potwierdź swoje dane.";
            }
            //jeżeli jest zalogowany pracownik
            else if ((labelP.uzytkownik == null) && (labelP.pracownik != null))
            {
                llogin.Enabled = false;
                lpassword.Enabled = false;
                tblogin.Enabled = false;
                tbpassword.Enabled = false;
                bzaloguj.Enabled = false;
                noweKonto.Enabled = true;
                listaKlientow.Enabled = true;
                lNazwiskoSearch.Enabled = true;
                tbNazwiskoSearch.Enabled = true;

                llogin.Visible = false;
                lpassword.Visible = false;
                tblogin.Visible = false;
                tbpassword.Visible = false;
                bzaloguj.Visible = false;
                noweKonto.Visible = true;
                listaKlientow.Visible = true;
                lNazwiskoSearch.Visible = true;
                tbNazwiskoSearch.Visible = true;

                tbLog.Text = "";
                tbImie.Text = "";
                tbNazwisko.Text = "";
                tbPesel.Text = "";
                tbAdres.Text = "";
                tbTel.Text = "";
                tbMail.Text = "";
                lStan.Text = "Jesteś zalogowany jako pracownik. Podaj dane klienta do zamówienia lub utwórz nowe konto";

                odswiezListeklientow();
            }
            //jeżeli nikt nie jest zalogowany
            else
            {
                llogin.Enabled = true;
                lpassword.Enabled = true;
                tblogin.Enabled = true;
                tbpassword.Enabled = true;
                bzaloguj.Enabled = true;
                noweKonto.Enabled = true;
                listaKlientow.Enabled = false;
                lNazwiskoSearch.Enabled = false;
                tbNazwiskoSearch.Visible = false;

                llogin.Visible = true;
                lpassword.Visible = true;
                tblogin.Visible = true;
                tbpassword.Visible = true;
                bzaloguj.Visible = true;
                noweKonto.Visible = true;
                listaKlientow.Visible = false;
                lNazwiskoSearch.Visible = false;
                tbNazwiskoSearch.Visible = false;

                tbLog.Text = "";
                tbImie.Text = "";
                tbNazwisko.Text = "";
                tbPesel.Text = "";
                tbAdres.Text = "";
                tbTel.Text = "";
                tbMail.Text = "";
                lStan.Text = "Zaloguj się lub załóż konto";
            }
        }

        #endregion //SprawdzanieLoginu

        #region zalogujClick

        //loguje użytkownika jeżeli nie został zalogowany w oknie głównym
        private void bzaloguj_Click(object sender, EventArgs e)
        {
            if (bzaloguj.Text == "Zaloguj")
            {
                bool b = false;

                Uzytkownik[] uz = BazaDanych.GetUzytkownicy();
                for (int i = 0; i < uz.Length; i++)
                {
                    if ((tblogin.Text == uz[i].UzLogin) && (tbpassword.Text == uz[i].UzHaslo))
                    {
                        b = true;
                        lStan.Text = "Witaj " + uz[i].UzLogin;
                        llogin.Enabled = false;
                        lpassword.Enabled = false;
                        tblogin.Enabled = false;
                        tbpassword.Enabled = false;
                        noweKonto.Enabled = false;
                        noweKonto.Visible = false;
                        bzaloguj.Text = "Wyloguj";

                        tbLog.Text = uz[i].UzLogin;
                        tbImie.Text = uz[i].UzImie;
                        tbNazwisko.Text = uz[i].UzNazwisko;
                        tbPesel.Text = uz[i].UzPesel;
                        tbAdres.Text = uz[i].UzAdres;
                        tbTel.Text = uz[i].UzTel;
                        tbMail.Text = uz[i].UzMail;
                    }
                }
                if (!b)
                {
                    lStan.Text = "Zły login lub hasło \nCzy chcesz utworzyć nowe konto?";
                }
            }
            else
            {
                lStan.Text = "Zaloguj się";
                llogin.Enabled = true;
                lpassword.Enabled = true;
                tblogin.Enabled = true;
                tbpassword.Enabled = true;
                noweKonto.Enabled = true;
                noweKonto.Visible = true;
                bzaloguj.Text = "Zaloguj";

                tbLog.Text = "";
                tbImie.Text = "";
                tbNazwisko.Text = "";
                tbPesel.Text = "";
                tbAdres.Text = "";
                tbTel.Text = "";
                tbMail.Text = "";
            }
        }

        #endregion //zalogujClick

        #region odswiezListeKlientow

        //odświeża listę klientów (dostępna tylko gdy pracownik jest zalogowany)
        private void odswiezListeklientow()
        {
            listaKlientow.Items.Clear();
            uz = BazaDanych.GetUzytkownicy();
            for (int i = 0; i < uz.Length; i++)
            {
                listaKlientow.Items.Add(uz[i].UzNazwisko + "  |  " + uz[i].UzImie + "  |  " + uz[i].UzLogin);
            }
            listaKlientow.Sorted = true;
            listaKlientow.SelectedIndex = 0;
        }

        #endregion //odswiezListeKlientow

        #region listaKlientow_SelectedIndexChanged

        //wybiera klienta z listy klientów i ustawia jego dane
        private void listaKlientow_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListBox lb = (ListBox)sender;
            if (lb.SelectedIndex == -1)
            {
                tbLog.Clear();
                tbImie.Clear();
                tbNazwisko.Clear();
                tbPesel.Clear();
                tbAdres.Clear();
                tbTel.Clear();
                tbMail.Clear();
            }
            else
            {
                String str = lb.SelectedItem.ToString();
                String substr = str.Substring(str.LastIndexOf("  |  ") + 5);
                for (int i = 0; i < uz.Length; i++)
                {
                    if (substr == uz[i].UzLogin)
                    {
                        tbLog.Text = uz[i].UzLogin;
                        tbImie.Text = uz[i].UzImie;
                        tbNazwisko.Text = uz[i].UzNazwisko;
                        tbPesel.Text = uz[i].UzPesel;
                        tbAdres.Text = uz[i].UzAdres;
                        tbTel.Text = uz[i].UzTel;
                        tbMail.Text = uz[i].UzMail;
                    }
                }
            }
        }

        #endregion //listaKlientow_SelectedIndexChanged

        #region nku_Deactivate

        //wywoływana w chwili zamknięcia okna tworzenia nowego użytkownika
        //wykorzystuje zmienną statyczną nowyUżytkownik
        private void nku_Deactivate(object sender, EventArgs e)
        {
            //jeżeli dodano nowego użytkownika do bazy
            if (nowyUzytkownik != null)
            {
                //jeżeli niezalogowany użytkownik utworzył swoje nowe konto
                if (WSN.lpowitalny.pracownik == null)
                {
                    tbLog.Text = nowyUzytkownik.UzLogin;
                    tbImie.Text = nowyUzytkownik.UzImie;
                    tbNazwisko.Text = nowyUzytkownik.UzNazwisko;
                    tbPesel.Text = nowyUzytkownik.UzPesel;
                    tbAdres.Text = nowyUzytkownik.UzAdres;
                    tbTel.Text = nowyUzytkownik.UzTel;
                    tbMail.Text = nowyUzytkownik.UzMail;

                    tblogin.Text = nowyUzytkownik.UzLogin;
                    tbpassword.Text = nowyUzytkownik.UzHaslo;
                    lStan.Text = "Witaj " + nowyUzytkownik.UzLogin + ". Jesteś już zalogowany";
                    llogin.Enabled = false;
                    lpassword.Enabled = false;
                    tblogin.Enabled = false;
                    tbpassword.Enabled = false;
                    noweKonto.Enabled = false;
                    noweKonto.Visible = false;
                    bzaloguj.Text = "Wyloguj";
                }
                //jeżeli zalogowany pracownik utworzył nowe konto użytkownika
                else
                {
                    odswiezListeklientow();
                    listaKlientow.SelectedIndex = listaKlientow.FindString(nowyUzytkownik.UzNazwisko);
                }
            }
        }

        #endregion //nku_Deactivate

        //kliknięcie przycisku Wstecz
        private void bwstecz_Click(object sender, EventArgs e)
        {
            this.Hide();
        }

        //użycie miniwyszukiwarki klientów
        private void tbNazwiskoSearch_TextChanged(object sender, EventArgs e)
        {
            listaKlientow.SelectedIndex = listaKlientow.FindString(((TextBox)sender).Text);
        }

        //kliknięcie przycisku Potwierdz
        private void bPotwierdz_Click(object sender, EventArgs e)
        {
            if (BazaDanych.czyUzytkownikNaCzarnejLiscie(tbLog.Text))
            {
                MessageBox.Show("Nie możesz złożyć zamówienia, ponieważ znajdujesz się na czarnej liście!");
                this.Close();
            }
            else
            {
                try
                {
                    BazaDanych.wyslijZamowienie(ListaSprzetow, ListaCzasow, BazaDanych.GetUserId(tbLog.Text));
                    MessageBox.Show("Twoje zamówienie zostało wysłane pomyślnie.");
                    this.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Wystąpił błąd podczas wysyłania zamówienia:\n" + ex.Message);
                    this.Close();
                }
            }
        }

        //kliknięcie linku noweKonto
        private void noweKonto_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            nku = new NoweKontoUzytkownika();
            nku.Deactivate += new EventHandler(this.nku_Deactivate);
            nku.Show();
        }

        Uzytkownik[] uz = null;
        //nku - okno tworzenia nowego konta użytkownika
        NoweKontoUzytkownika nku = null;
        //nowyUzytkownik - zmienna w której przechowywany jest obiekt użytkownika
        //nowo utworzonego w oknie nku
        public static Uzytkownik nowyUzytkownik = null;

        private void tbLog_TextChanged(object sender, EventArgs e)
        {
            if (tbLog.Text == "") bPotwierdz.Enabled = false;
            else bPotwierdz.Enabled = true;
        }
    }
}
